#include "token.h"

namespace tinyscript{
namespace internal{
const char* Token::GetTokenName( int tk ) {
    switch(tk) {
#define _DO(t,s) \
    case t: return s
    _DO(TT_ADD,"+");
    _DO(TT_DIV,"/");
    _DO(TT_SUB,"-");
    _DO(TT_MUL,"*");
    _DO(TT_MOD,"%");

    _DO(TT_AND,"&&");
    _DO(TT_OR,"||");
    _DO(TT_NOT,"!");
    _DO(TT_LT,"<");
    _DO(TT_GT,">");
    _DO(TT_LET,"<=");
    _DO(TT_GET,">=");
    _DO(TT_EQ,"==");
    _DO(TT_NEQ,"!=");
	_DO(TT_RETURN,"return");
    _DO(TT_LLBRACKET,"{");
    _DO(TT_RLBRACKET,"}");
    _DO(TT_LMBRACKET,"[");
    _DO(TT_RMBRACKET,"]");
    _DO(TT_LSBRACKET,"(");
    _DO(TT_RSBRACKET,")");
    _DO(TT_ASSIGN,"=");
    _DO(TT_COMMA,",");
    _DO(TT_END,";");
	_DO(TT_DOT,".");
	_DO(TT_POUND,"#");
	_DO(TT_DOLLAR,"$");
	_DO(TT_AT,"@");
	_DO(TT_AMP,"&");
	_DO(TT_VAR,"var");
	_DO(TT_GLOBAL,"global");
    _DO(TT_SYMBOL,"<symbol>");
    _DO(TT_INT,"<int>");
    _DO(TT_FLOAT,"<float>");
    _DO(TT_STRING,"<string>");
    _DO(TT_TRUE,"<true>");
    _DO(TT_FALSE,"<false>");
    _DO(TT_DO,"do");
    _DO(TT_IF,"if");
    _DO(TT_ELSE,"else");
    _DO(TT_ELSEIF,"elseif");
    _DO(TT_FUNCTION,"function");
    _DO(TT_FOR,"for");
    _DO(TT_FOREACH,"foreach");
    _DO(TT_BREAK,"break");
    _DO(TT_CONTINUE,"continue");
    _DO(TT_PASS,"pass");
    _DO(TT_EOF,"<eof>");
    _DO(TT_WHITESPACE,"<whitespace>");
#undef _Do
    default: return "!!ERROR!!";
    }
}
}
}
